<template>
  <div class="app-container">
    <h1>App 根组件</h1>
    <hr/>

    <button @click="comName = 'Left'">展示 Left</button>
    <button @click="comName = 'Right'">展示 Right</button>
    <div class="box">
      <!--渲染Left和Right组件-->
      <!--1.component标签是vue内置的， 左作用：组件的占位符-->
      <!--2.is属性的值，表示要渲染组件的名字-->
      <!--<component is="Left"></component>-->
      <!--keep-alive 可以把内部的组件进行缓存，不被销毁-->
<!--      <keep-alive>-->
<!--        <component :is="comName"></component>-->
<!--      </keep-alive>-->
      <!--include:指定要被缓存的组件  exclude:指定不要被缓存的组件  不能同时使用-->
      <keep-alive include="Left">
        <component :is="comName"></component>
      </keep-alive>
      <!--<component :is="comName"></component>-->
      <!--<Left></Left>-->
    </div>
  </div>
</template>

<script>
import Left from '@/components/Left.vue'
import Right from '@/components/Right.vue'


export default {
  data(){
    return {
      //表示要渲染组件的名字
      comName: 'Left'
    }
  },
  created() {
    console.log('Left组件被创建了')
  },
  destroyed() {
    console.log('Left组件被销毁了')
  },
  //当组件第一次创建时，即会执行created生命周期，也会执行activated生命周期
  //当组件被激活的时候，只会触发activated生命周期，不再触发created,因为组件没有被重写创建
  activated() {
    console.log('Left组件被激活了 created')
  },
  deactivated() {
    console.log('Left组件被缓存了 deactivated')
  },
  //私有子组件
  components: {
    //如果在“声明组件”的时候，没有为组件指定name名称，则组件的名称默认时“注册时的名称”
    Left,
    Right
  }
}
</script>

<style lang="less">
.app-container {
  padding: 1px 20px 20px;
  background-color: #efefef;
}
.box {
  display: flex;
}
</style>
